home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Disc to the Future 2
/
Disc to the Future Part II Programmer's Reference (Wayzata Technology)(6013)(1992).bin
/
MAC
/
MACSHELL
/
MS1
/
SHELL_SO
/
PRINTCMD.C
< prev
next >
Wrap
Text File
|
1992-12-02
|
7KB
|
284 lines
/*
* MacShell Source File
*
* Copyright (c) 1989, 1990, 1991, 1992 Suick Bay Technologies. All rights reserved.
*
*
* RESTRICTIONS ON MacShell program and source code.
*
* Ñ╩MacShell¬ is a product of Suick Bay Technologies and is provided for
* restricted use by the owner of the CDROM "Disk to the future II".
*
* Ñ╩No permission is granted for any commercial use without the written
* consent of the Suick Bay Technologies.
*
* Ñ╩No permission is granted for any redistribution of any kind use without
* the written consent of the Suick Bay Technologies.
*
* Ñ╩Permission is granted to use this for any personal noncommercial use.
*
* Ñ╩You may not distribute source or executable code at all, nor may you
* distribute it with or within a commercial product without the written
* consent of the Suick Bay Technologies. Please send modifications to
* the author for inclusion in updates to the program. Thanks.
*
*
* MacShell¬ IS PROVIDED AS IS WITH NO WARRANTIES OF ANY KIND INCLUDING THE
* WARRANTIES OF DESIGN, MERCHANTIBILITY AND FITNESS FOR A PARTICULAR
* PURPOSE, OR ARISING FROM A COURSE OF DEALING, USAGE OR TRADE PRACTICE.
*
* SUICK BAY TECHNOLOGIES SHALL HAVE NO LIABILITY WITH RESPECT TO THE
* INFRINGEMENT OF COPYRIGHTS, TRADE SECRETS OR ANY PATENTS BY MACSHELL
* OR ANY PART THEREOF.
*
* In no event will Suick Bay Technologies be liable for any lost revenue
* or profits or other special, indirect and consequential damages, even if
* Suick Bay Technologies has been advised of the possibility of such damages.
*
* Suick Bay Technologies can be reached at:
*
* 8768 Cottonwood lane
* Maple Grove, MN 55369
* Voice: (612) 425-7025
* AppleLink: D5233
*
*
* No parts of this software may be reproduced or stored in a
* retrieval system or transmitted in any form, or any means,
* electronic, mechanical, photocopying, recording or otherwise,
* without the prior written permission of Suick Bay Technologies.
*
* Spread the word and not the disk.
*
* SPK 012290 : Initial
*/
#include <PrintMgr.h>
#define PrintDialogID 917
#define PageSetUpDialogID 918
#include "SystemPub.h"
#include "Proc.h"
#include "Shell.h"
#include "Path.h"
#define BUFSIZE 256
/*******************************************************************
*
* Function Pr
*
* PathName Callback function
*
* usage pr [options] files
*
*******************************************************************/
int16 prCols = 1,
portrait = TRUE,
prHeader = TRUE,
prJob = FALSE,
prSetup = FALSE;
extern WordBreak(),
AutoScroll();
extern THPrint hPrint;
extern TPPrPort pPrPort;
extern Boolean aborted;
void PrCallBack( WHandle ShellWh, int16 ProcID, char *path, char *last,
pathType what, int16 vRefNum, int32 dirID )
{
CInfoPBRec pb;
char str[ 256 ];
PEHandle hPE = NULL;
Rect viewRect;
int16 copies;
TPrStatus prStatus;
DialogPtr dPtr;
int32 grow, max;
max = MaxMem( &grow );
strcpy( str, last );
CtoPstr( str );
pb.hFileInfo.ioCompletion = NULL;
pb.hFileInfo.ioNamePtr = (StringPtr) str;
pb.hFileInfo.ioVRefNum = vRefNum;
pb.hFileInfo.ioDirID = dirID;
pb.hFileInfo.ioFDirIndex = 0;
PBHGetFInfo( &pb, FALSE );
if( pb.hFileInfo.ioFlFndrInfo.fdType == 'TEXT' )
{
if( OpenPrinter() && (aborted == FALSE) )
{
if( prJob && !PrJobDialog( hPrint ) )
{
ClosePrinter();
return;
}
procPrintf( ShellWh, ProcID, " %ps\n", str );
hPE = PENew( &viewRect );
copies = (**hPrint).prJob.iCopies;
if ((**hPrint).prJob.bJDocLoop == bSpoolLoop)
copies = 1;
dPtr = GetNewDialog( PrintDialogID, NULL, -1L );
CenterDialog( dPtr );
DrawDialog( dPtr );
CursorWait();
aborted = FALSE;
SetRect( &viewRect, 0, 0, 10, 10 );
if( hPE )
{
(**hPE).txFont = monaco; /* chicago */
(**hPE).txSize = fontSize;
(**hPE).txFace = 0;
(**hPE).viewOrgH = -5;
(**hPE).wordBreak = ( ProcPtr ) WordBreak;
(**hPE).clikLoop = ( ProcPtr ) AutoScroll;
pPrPort = PrOpenDoc( hPrint, NULL, NULL );
if( pPrPort )
{
if( ReadFile( vRefNum, dirID, str, hPE ) )
{
for( ; copies--; )
{
if( AbortPrint() )
break;
if( PrintEditWindow( hPE, str,
NULL, prCols, prHeader ) == FALSE )
break;
}
}
PrCloseDoc( pPrPort );
}
PEDispose( hPE );
}
if( !AbortPrint() )
if( (**hPrint).prJob.bJDocLoop == bSpoolLoop )
PrPicFile( hPrint, nil, nil, nil, &prStatus );
DisposDialog( dPtr );
InitCursor();
ClosePrinter();
}
}
}
/*******************************************************************/
void PrFiles( WHandle ShellWh, int16 ProcID, char *argument )
{
ShellWindRec **MyShell;
MyShell = (ShellWindRec **) (**ShellWh).thing;
ExpandPath( ShellWh, ProcID, argument, (ProcPtr) PrCallBack,
(**MyShell).pwdVRefNum, (**MyShell).pwdDirID );
ResetShellPWD( ShellWh );
}
/*******************************************************************/
Boolean DoPR( int16 ProcToken, WHandle ShellWh, int16 ProcID, char *string )
{
int16 i, argc;
char *cp, argument[ 256 ];
ShellWindRec **MyShell = (ShellWindRec **) (**ShellWh).thing;
switch( ProcToken )
{
case PROC_INIT :
(**MyShell).Proc[ ProcID ].flags = TRUE;
break;
case PROC_TERM :
case PROC_BREAK :
/* Tell the shell that we're done */
SendOutToken( ShellWh, ProcID, PROC_BREAK );
/* Turn ourself off */
(**MyShell).Proc[ ProcID ].ProcActive = FALSE;
break;
case PROC_STDIN :
if( (**MyShell).Proc[ ProcID ].flags )
{
(**MyShell).Proc[ ProcID ].flags = FALSE;
aborted = FALSE;
prCols = 1;
/* get arguments */
argc = (**MyShell).Proc[ ProcID ].argc;
for( i = 1; i < argc; i++ )
{
GetArgv( ShellWh, ProcID, i, argument );
cp = argument;
if( *cp++ == '-' )
while( *cp )
switch( *cp++ )
{
case '2' : /* 2 columns */
prCols = 2;
break;
case '3' : /* 3 columns */
prCols = 3;
break;
case '4' : /* 4 columns Mega dpi */
prCols = 4;
break;
case 'l' : /* landscape */
portrait = FALSE;
break;
case 'n' : /* no headers */
prHeader = FALSE;
break;
case 's' : /* Do setup dialog */
prSetup = TRUE;
break;
case 'j' : /* do Job dialog */
prJob = TRUE;
break;
}
}
if( prSetup )
DoPageSetup();
for( i = 1; i < (**MyShell).Proc[ ProcID ].argc; i++ )
{
GetArgv( ShellWh, ProcID, i, argument );
if( *argument != '-' )
PrFiles( ShellWh, ProcID, argument );
}
/* Tell the shell that we're done */
SendOutToken( ShellWh, ProcID, PROC_BREAK );
/* Turn ourself off */
(**MyShell).Proc[ ProcID ].ProcActive = FALSE;
return( FALSE );
}
}
}